Welcome Guest, you are in: Login
CTS Futures
Home
Pricing
Market Data
FAQ
Videos

T4 Desktop
User Guide
Scripting Guide
Release Notes

Mobile and Web
T4 Mobile for Android
T4 Mobile for iOS
T4 Mobile for Browser
T4 WebTrader

Admins
T4 Admin Guide
MiFID II/MiFIR

Developers
API 4.7 Guide
FIX API


Page History: Scripting Overview

Compare Page Revisions



« Older Revision - Back to Page History - Newer Revision »


Page Revision: 2011/07/22 22:32



Code Structure

Scripting code consists of one or more statements that are executed by the script interpreter.

Individual statements are separated by semicolons. White spaces (spaces, tabs, carriage returns, etc.) have no effect on how scripts are interpreted. Scripts are case-insensitive (e.g. sma is the same as SMA).

Statements can do the following:

  • Perform a calculation.
  • Assign a value or calculation to a variable name.
  • Accept user input into a variable.
  • Plot values on a chart in various different formats.
  • Configure the chart.

Lets take a look at a script that computes the Disparity Index indicator:

VSCALE_DECIMALS(2);

periods = INPUT("MA Periods", 14, 1, 100);
indcolor = INPUT("Color", Color.Blue);

ma = SMA(CLOSE, periods);
di = 100 * ((CLOSE - ma) / ma);

PLOT_HISTOGRAM(di, 0.75, indcolor);
SUMMARY("Disparity Index({?}) {?:F2}", periods, di);

The first line, VSCALE_DECIMALS(2);, is a chart configuration command that states that we want numbers on the indicator value scale to display out to two decimal places.

Next, we accept some user input for the number of moving average periods and the color to draw the indicator. These values are stored in variable names (periods and indcolor) for later use in the script.

The indicator values are calculated next. This is done in two steps to make it easier to read and also to improve efficiency of the script. A simple moving average of the closing price is first computed and stored in variable ma. As you can see, we feed the user configurable number periods into the SMA function. This allows for the periods to be adjusted through the chart properties window without having to open and modify the script every time. Finally, we compute the disparity index as a percentage and store it in variable di. This is simply a computation of the percent difference of the current closing price to the moving average and the syntax was designed to be as intuitive as possible.

The last thing done by the script is to plot the values and display a summary.

This script produces the following output:

Image

Also, because we used the input statement, the number of periods and the drawing color can be easily changed using the chart properties window:

Image



Assign Values to Variables

Variables, in the scripting system, are simply names that hold values. Variable use is crucial to success in working with scripts. Not only do variables make scripts easier to read, they play a huge role in allowing scripts to run efficiently by not having to perform the same computation multiple times.

Take a look at the Disparity Index indicator one more again:

VSCALE_DECIMALS(2);

periods = INPUT("MA Periods", 14, 1, 100);
indcolor = INPUT("Color", Color.Blue);

ma = SMA(CLOSE, periods);
di = 100 * ((CLOSE - ma) / ma);

PLOT_HISTOGRAM(di, 0.75, indcolor);
SUMMARY("Disparity Index({?}) {?:F2}", periods, di);

If we didn't use the ma and di variables to store intermediate parts of our computation, here is what the script might look like:

VSCALE_DECIMALS(2);

periods = INPUT("MA Periods", 14, 1, 100);
indcolor = INPUT("Color", Color.Blue);

PLOT_HISTOGRAM(100 * ((CLOSE - SMA(CLOSE, periods)) / SMA(CLOSE, periods)), 0.75, indcolor);
SUMMARY("Disparity Index({?}) {?:F2}", periods, 100 * ((CLOSE - SMA(CLOSE, periods)) / SMA(CLOSE, periods)));

(Note: we still have to variables for INPUT statements because there is no other way).

This new script is perfectly valid and will run just fine, producing the same exact result as before. However, this script will run much slower because it is going to compute the same simple moving average 4 times, and the disparity index twice (once for the plot and once for the summary).

It goes without saying that you are going to want your scripts to evaluate as quickly as possible, especially in extremely busy markets where it could get executed many times per second.

Variables have an additional, slightly more obscure benefit as well. When you create a variable and assign it the result of a computation, you can think of the variable as representing a column in a spreadsheet...

Thinking of Scripts Like a Spreadsheet

A feature of the T4 chart scripting language is that if you can model your algorithm in a spreadsheet like Excel, then you should have no problems re-creating the same using the chart scripting language.

xxx

Think of rows in the spreadsheet as data points and columns as values of or at those data points (e.g. open, high, low, close, volume, etc.) When you create a variable and assign it a value, you are essentially creating a new column in the spreadsheet. You can then use column names as values in your equations, or plot the values of a column on the chart by passing the column name to a plotting function.

Spreadsheet rows represent data points. The base data points are the bars that get plotted on the chart. Each bar occurs at a specific time that depends on the charting interval being used (e.g. 15 minute, 1 day, etc.)

Compute SMA 3 Different Ways

Plot Lines, Histograms, Wavecrests, Bands, Points

Plot Limit Lines, Center Lines and Range Markers

Display a Customized Summary

Format Tick Prices for Display

Change Plot Colors/Styles on the Fly

Custom Colors and Transparency

Accept Input via the Properties Window

Configure the Value Scale for Indicators

Using Aggregation Functions

Using IF Statements

Using the Cross Functions

Using NIL

Perform Recursive Calculations

Don't Reassign Variables

Don't Cause Circular References

Trade how you want, where you want

support@ctsfutures.com (312) 939 0164

2 Pierce Pl, Suite 200, Itasca, IL 60143

© 2009-2023 Cunningham Trading Systems LLC All rights reserved.